package vistas;

import java.awt.EventQueue;

import javax.swing.JDialog;
import javax.swing.JLabel;
import java.awt.Font;

import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import clases.Empleadohorarios_class;
import clases.utilidades_class;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;

import javax.swing.JPopupMenu;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JMenuItem;
import javax.swing.ImageIcon;
import java.awt.Cursor;
import com.toedter.calendar.JDateChooser;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;

import org.omg.CORBA.NO_MEMORY;

import java.awt.Toolkit;

public class Asignarhorarios_buscarform extends JInternalFrame {
	private JTextField tbuscar;
	private JTable table;
	private int filas;
	JDateChooser fechainicio,fechafin;
	utilidades_class utilidades;
	JButton btnExportar;
	private ResultSet resultadoexportar;
	private String efechainicio, efechafin, query;
	private ArrayList<String> parametros;
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Asignarhorarios_buscarform dialog = new Asignarhorarios_buscarform(0);
					dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
					dialog.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the dialog.
	 */
	public Asignarhorarios_buscarform(int tipo) {
		setFrameIcon(new ImageIcon(Asignarhorarios_buscarform.class.getResource("/icons/asignar_horario.png")));
		setClosable(true);
		setIconifiable(true);
		setTitle("Buscar Horarios");
		setBounds(100, 100, 600, 423);
		getContentPane().setLayout(null);
		
		filas=0;
		utilidades = new utilidades_class();
		
		JLabel label = new JLabel("Empleado");
		label.setFont(new Font("Tahoma", Font.PLAIN, 13));
		label.setBounds(10, 13, 59, 16);
		getContentPane().add(label);
		
		tbuscar = new JTextField();
		tbuscar.setFont(new Font("Tahoma", Font.PLAIN, 13));
		tbuscar.setColumns(10);
		tbuscar.setBounds(81, 11, 349, 20);
		getContentPane().add(tbuscar);
		
		JButton btnBuscar = new JButton("Buscar");
		btnBuscar.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
		btnBuscar.setContentAreaFilled(false);
		btnBuscar.setIcon(new ImageIcon(Asignarhorarios_buscarform.class.getResource("/icons/buscar.png")));
		btnBuscar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				
				try
				{
					DefaultTableModel masignaciones = (DefaultTableModel)table.getModel();
					filas=0;
					while(masignaciones.getRowCount()>0) masignaciones.removeRow(0);
					
					//BUSCAR SOLO POR NOMBRE
					if(fechainicio.getDate()==null && fechafin.getDate()==null)
					{
						query = "SELECT  (ficha.nombres+ ' '+ficha.primerapellido+ ' '+ ficha.segundoapellido) AS nombres, ficha.telefono, "+
								" CONVERT(varchar, empleadohorarios.fechainicio, 103) AS fechainicio,  "+
								" CONVERT(varchar, empleadohorarios.fechafin, 103) AS fechafin,  "+
								" ocupaciones.nombre AS nombreocupacion,"+
								" horarios.nombre AS nombrehorario," +
								" empleadohorarios.codigoempleadohorario AS chorarioempleado,"+
								" horarios.descripcion AS descripcionhorario,"+
								" CONVERT(varchar, horarios.horainicio, 108) AS horainicio,"+
								" CONVERT(varchar, horarios.horafin, 108) AS horafin"+
								" FROM dbo.empleadohorarios "+
								" INNER JOIN dbo.ficha ON empleadohorarios.codigoficha = ficha.codigonit"+
								" INNER JOIN dbo.ocupaciones ON empleadohorarios.codigoocupacion = ocupaciones.codigoocupacion "+
								" INNER JOIN dbo.horarios ON empleadohorarios.codigohorario = horarios.codigohorario " +
								   " WHERE nombres like ?";
						parametros = new ArrayList<String>();
						parametros.add("%"+tbuscar.getText()+"%");
					}
					//POR FECHA DE INICIO Y NOMBRE
					else if((fechainicio.getDate()!=null && fechafin.getDate()==null && tbuscar.getText().trim().length()>0))
					{
						query = "SELECT  (ficha.nombres+ ' '+ficha.primerapellido+ ' '+ ficha.segundoapellido) AS nombres, ficha.telefono, "+
								" CONVERT(varchar, empleadohorarios.fechainicio, 103) AS fechainicio,  "+
								" CONVERT(varchar, empleadohorarios.fechafin, 103) AS fechafin,  "+
								" ocupaciones.nombre AS nombreocupacion,"+
								" horarios.nombre AS nombrehorario," +
								" empleadohorarios.codigoempleadohorario AS chorarioempleado,"+
								" horarios.descripcion AS descripcionhorario,"+
								" CONVERT(varchar, horarios.horainicio, 108) AS horainicio,"+
								" CONVERT(varchar, horarios.horafin, 108) AS horafin"+
								" FROM dbo.empleadohorarios "+
								" INNER JOIN dbo.ficha ON empleadohorarios.codigoficha = ficha.codigonit"+
								" INNER JOIN dbo.ocupaciones ON empleadohorarios.codigoocupacion = ocupaciones.codigoocupacion "+
								" INNER JOIN dbo.horarios ON empleadohorarios.codigohorario = horarios.codigohorario " +
								" WHERE nombres like ? AND fechainicio>=?";
						parametros = new ArrayList<String>();
						parametros.add("%"+tbuscar.getText()+"%");
						parametros.add(utilidades.insertarfecha(fechainicio.getDate()));
					}
					//POR FECHA DE FIN Y NOMBRE
					else if((fechainicio.getDate()!=null && fechafin.getDate()==null && tbuscar.getText().trim().length()>0))
					{
						query = "SELECT  (ficha.nombres+ ' '+ficha.primerapellido+ ' '+ ficha.segundoapellido) AS nombres, ficha.telefono, "+
								" CONVERT(varchar, empleadohorarios.fechainicio, 103) AS fechainicio,  "+
								" CONVERT(varchar, empleadohorarios.fechafin, 103) AS fechafin,  "+
								" ocupaciones.nombre AS nombreocupacion,"+
								" horarios.nombre AS nombrehorario," +
								" empleadohorarios.codigoempleadohorario AS chorarioempleado,"+
								" horarios.descripcion AS descripcionhorario,"+
								" CONVERT(varchar, horarios.horainicio, 108) AS horainicio,"+
								" CONVERT(varchar, horarios.horafin, 108) AS horafin"+
								" FROM dbo.empleadohorarios "+
								" INNER JOIN dbo.ficha ON empleadohorarios.codigoficha = ficha.codigonit"+
								" INNER JOIN dbo.ocupaciones ON empleadohorarios.codigoocupacion = ocupaciones.codigoocupacion "+
								" INNER JOIN dbo.horarios ON empleadohorarios.codigohorario = horarios.codigohorario " +
								" WHERE nombres like ? AND fechafin<=?";
						parametros = new ArrayList<String>();
						parametros.add("%"+tbuscar.getText()+"%");
						parametros.add(utilidades.insertarfecha(fechafin.getDate()));
					}
					//POR LAS DOS FECHAS Y NOMBRE
					else if((fechainicio.getDate()!=null && fechafin.getDate()!=null && tbuscar.getText().trim().length()>0))
					{
						query = "SELECT  (ficha.nombres+ ' '+ficha.primerapellido+ ' '+ ficha.segundoapellido) AS nombres, ficha.telefono, "+
								" CONVERT(varchar, empleadohorarios.fechainicio, 103) AS fechainicio,  "+
								" CONVERT(varchar, empleadohorarios.fechafin, 103) AS fechafin,  "+
								" ocupaciones.nombre AS nombreocupacion,"+
								" horarios.nombre AS nombrehorario," +
								" empleadohorarios.codigoempleadohorario AS chorarioempleado,"+
								" horarios.descripcion AS descripcionhorario,"+
								" CONVERT(varchar, horarios.horainicio, 108) AS horainicio,"+
								" CONVERT(varchar, horarios.horafin, 108) AS horafin"+
								" FROM dbo.empleadohorarios "+
								" INNER JOIN dbo.ficha ON empleadohorarios.codigoficha = ficha.codigonit"+
								" INNER JOIN dbo.ocupaciones ON empleadohorarios.codigoocupacion = ocupaciones.codigoocupacion "+
								" INNER JOIN dbo.horarios ON empleadohorarios.codigohorario = horarios.codigohorario " +
								" WHERE nombres like ? AND fechainicio>=? AND fechafin<=?";
						parametros = new ArrayList<String>();
						parametros.add("%"+tbuscar.getText()+"%");
						parametros.add(utilidades.insertarfecha(fechainicio.getDate()));
						parametros.add(utilidades.insertarfecha(fechafin.getDate()));
					}
					//POR LAS FECHA DE INICIO
					else if(fechainicio.getDate()!=null && fechafin.getDate()==null)
					{
						query = "SELECT  (ficha.nombres+ ' '+ficha.primerapellido+ ' '+ ficha.segundoapellido) AS nombres, ficha.telefono, "+
								" CONVERT(varchar, empleadohorarios.fechainicio, 103) AS fechainicio,  "+
								" CONVERT(varchar, empleadohorarios.fechafin, 103) AS fechafin,  "+
								" ocupaciones.nombre AS nombreocupacion,"+
								" horarios.nombre AS nombrehorario," +
								" empleadohorarios.codigoempleadohorario AS chorarioempleado,"+
								" horarios.descripcion AS descripcionhorario,"+
								" CONVERT(varchar, horarios.horainicio, 108) AS horainicio,"+
								" CONVERT(varchar, horarios.horafin, 108) AS horafin"+
								" FROM dbo.empleadohorarios "+
								" INNER JOIN dbo.ficha ON empleadohorarios.codigoficha = ficha.codigonit"+
								" INNER JOIN dbo.ocupaciones ON empleadohorarios.codigoocupacion = ocupaciones.codigoocupacion "+
								" INNER JOIN dbo.horarios ON empleadohorarios.codigohorario = horarios.codigohorario " +
								" WHERE nombres like ? AND fechainicio>=?";
						parametros = new ArrayList<String>();
						parametros.add("%"+tbuscar.getText()+"%");
						parametros.add(utilidades.insertarfecha(fechainicio.getDate()));
					}
					//POR LAS FECHA DE FIN
					else if(fechainicio.getDate()==null && fechafin.getDate()!=null)
					{
						query = "SELECT  (ficha.nombres+ ' '+ficha.primerapellido+ ' '+ ficha.segundoapellido) AS nombres, ficha.telefono, "+
								" CONVERT(varchar, empleadohorarios.fechainicio, 103) AS fechainicio,  "+
								" CONVERT(varchar, empleadohorarios.fechafin, 103) AS fechafin,  "+
								" ocupaciones.nombre AS nombreocupacion," +
								" empleadohorarios.codigoempleadohorario AS chorarioempleado,"+
								" horarios.nombre AS nombrehorario,"+
								" horarios.descripcion AS descripcionhorario,"+
								" CONVERT(varchar, horarios.horainicio, 108) AS horainicio,"+
								" CONVERT(varchar, horarios.horafin, 108) AS horafin"+
								" FROM dbo.empleadohorarios "+
								" INNER JOIN dbo.ficha ON empleadohorarios.codigoficha = ficha.codigonit"+
								" INNER JOIN dbo.ocupaciones ON empleadohorarios.codigoocupacion = ocupaciones.codigoocupacion "+
								" INNER JOIN dbo.horarios ON empleadohorarios.codigohorario = horarios.codigohorario " +
								" WHERE nombres like ? AND fechafin<=?";
						parametros = new ArrayList<String>();
						parametros.add("%"+tbuscar.getText()+"%");
						parametros.add(utilidades.insertarfecha(fechafin.getDate()));
					}
					
					
					//SOLO POR LAS DOS FECHAS 
					else if((fechainicio.getDate()!=null && fechafin.getDate()!=null))
					{
						query = "SELECT  (ficha.nombres+ ' '+ficha.primerapellido+ ' '+ ficha.segundoapellido) AS nombres, ficha.telefono, "+
								" CONVERT(varchar, empleadohorarios.fechainicio, 103) AS fechainicio,  "+
								" CONVERT(varchar, empleadohorarios.fechafin, 103) AS fechafin,  "+
								" ocupaciones.nombre AS nombreocupacion,"+
								" horarios.nombre AS nombrehorario," +
								" empleadohorarios.codigoempleadohorario AS chorarioempleado,"+
								" horarios.descripcion AS descripcionhorario,"+
								" CONVERT(varchar, horarios.horainicio, 108) AS horainicio,"+
								" CONVERT(varchar, horarios.horafin, 108) AS horafin"+
								" FROM dbo.empleadohorarios "+
								" INNER JOIN dbo.ficha ON empleadohorarios.codigoficha = ficha.codigonit"+
								" INNER JOIN dbo.ocupaciones ON empleadohorarios.codigoocupacion = ocupaciones.codigoocupacion "+
								" INNER JOIN dbo.horarios ON empleadohorarios.codigohorario = horarios.codigohorario " +
								" WHERE fechainicio>=? AND fechafin<=?";
						parametros = new ArrayList<String>();
						parametros.add(utilidades.insertarfecha(fechainicio.getDate()));
						parametros.add(utilidades.insertarfecha(fechafin.getDate()));
					}


										
					btnExportar.setEnabled(false);
					ResultSet resultado = new Empleadohorarios_class().consultaConnection(query, parametros);
					
					while(resultado.next())
					{
						if(resultado.getRow()==1) efechainicio = resultado.getString("fechainicio");
						
						masignaciones.addRow(new Object[filas]);
						masignaciones.setValueAt(resultado.getString("chorarioempleado"), filas, 0);
						masignaciones.setValueAt(resultado.getString("nombres"), filas, 1);
						masignaciones.setValueAt(resultado.getString("fechainicio"), filas, 2);
						masignaciones.setValueAt(resultado.getString("fechafin"), filas, 3);
						efechafin = resultado.getString("fechafin");
						filas++;
						btnExportar.setEnabled(true);
					}
					resultado.close();
					
				}catch(Exception ex)
				{
					JOptionPane.showMessageDialog(null, ex.toString());
				}
			}
		});
		btnBuscar.setBounds(440, 11, 125, 23);
		getContentPane().add(btnBuscar);
		
		JLabel lblFecha = new JLabel("Fecha Inicio");
		lblFecha.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblFecha.setBounds(10, 40, 68, 16);
		getContentPane().add(lblFecha);
		
		fechainicio = new JDateChooser();
		fechainicio.setDateFormatString("dd/MM/yyyy");
		fechainicio.setBounds(81, 40, 101, 20);
		getContentPane().add(fechainicio);
		
		JLabel lblFechaFin = new JLabel("Fecha Fin");
		lblFechaFin.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblFechaFin.setBounds(258, 42, 68, 16);
		getContentPane().add(lblFechaFin);
		
		fechafin = new JDateChooser();
		fechafin.setDateFormatString("dd/MM/yyyy");
		fechafin.setBounds(329, 42, 101, 20);
		getContentPane().add(fechafin);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPane.setBounds(10, 67, 555, 307);
		getContentPane().add(scrollPane);
		
		table = new JTable();
		scrollPane.setViewportView(table);
		table.setModel(new DefaultTableModel(
			new Object[][] {
			},
			new String[] {
				"codigoasignacion", "Empleado", "Fecha Inicio", "Fecha Fin"
			}
		));
		table.getColumnModel().getColumn(0).setPreferredWidth(15);
		table.getColumnModel().getColumn(0).setMinWidth(0);
		table.getColumnModel().getColumn(0).setMaxWidth(0);
		
		JPopupMenu popupMenu = new JPopupMenu();
		addPopup(table, popupMenu);
		
		JMenuItem mntmModificaritem = new JMenuItem("Modificar");
		mntmModificaritem.setIcon(new ImageIcon(Asignarhorarios_buscarform.class.getResource("/icons/modificar_pq.png")));
		mntmModificaritem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if(table.getSelectedRow()>-1)
				{
					Asignarhorarios_ingresarform asignar = new Asignarhorarios_ingresarform(table.getValueAt(table.getSelectedRow(), 0).toString());
					Principal.contenedor.add(asignar);
					asignar.setVisible(true);
				}
			}
		});
		popupMenu.add(mntmModificaritem);
		
		btnExportar = new JButton("Exportar");
		btnExportar.setEnabled(false);
		btnExportar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				try
				{
					new Empleadohorarios_class(query, parametros, efechainicio, efechafin).exportarHorarios();
				}catch(Exception ex)
				{
					JOptionPane.showMessageDialog(null, ex.toString());
				}
			}
		});
		btnExportar.setIcon(new ImageIcon(Asignarhorarios_buscarform.class.getResource("/icons/export_excel.png")));
		btnExportar.setContentAreaFilled(false);
		btnExportar.setBounds(440, 38, 125, 23);
		getContentPane().add(btnExportar);
		
		if(tipo==1)
		{
			JMenuItem mntmSeleccionar = new JMenuItem("Seleccionar");
			mntmSeleccionar.setIcon(new ImageIcon(Asignarhorarios_buscarform.class.getResource("/icons/seleccionar_pq.png")));
			mntmSeleccionar.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					if(table.getSelectedRow()>-1)
					{
						Asistencias_ingresarform.templeado.setText(table.getValueAt(table.getSelectedRow(), 1).toString());
						Asistencias_ingresarform.codempleadohorarios=table.getValueAt(table.getSelectedRow(), 0).toString();
						dispose();
					}
				}
			});
			popupMenu.add(mntmSeleccionar);
		}

	}
	private static void addPopup(Component component, final JPopupMenu popup) {
		component.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent e) {
				if (e.isPopupTrigger()) {
					showMenu(e);
				}
			}
			public void mouseReleased(MouseEvent e) {
				if (e.isPopupTrigger()) {
					showMenu(e);
				}
			}
			private void showMenu(MouseEvent e) {
				popup.show(e.getComponent(), e.getX(), e.getY());
			}
			@Override
			public void mouseClicked(MouseEvent arg0) {
				
			}
		});
	}
}
